.TITLE DRREQ .IDENT /05.00/ ; ; Copyright (c) 1995-1999 by Mentec, Inc., U.S.A. ; All rights reserved ; ; ; D. N. CUTLER 13-SEP-73 ; ; ; MODIFIED BY: ; ; J. W. BERZLE 26-JUN-84 05.00 ; ; JWB085 -- PROPAGATE CONTEXT BLOCK POINTER ; (NAMED DIRECTORY SUPPORT) ; ; ; ; REQUEST TASK DIRECTIVE ; ; MACRO LIBRARY CALLS ; .IF NDF P$$OFF .MCALL TCBDF$ TCBDF$ ;DEFINE TASK CONTROL BLOCK OFFSETS ;+ ; **-$DRREQ-REQUEST TASK ; ; THIS DIRECTIVE INSTRUCTS THE SYSTEM TO REQUEST THE EXECUTION ; OF A SPECIFIED TASK. ; ; DPB FORMAT: ; ; WD. 00 -- DIC(11.),DPB SIZE(7.). ; WD. 01 -- FIRST HALF OF TASK NAME. ; WD. 02 -- SECOND HALF OF TASK NAME. ; WD. 03 -- PARTITION NAME-NOT SUPPORTED BUT MUST BE PRESENT. ; WD. 04 -- PARTITION NAME-NOT SUPPORTED BUT BUST BE PRESENT. ; WD. 05 -- REQUEST PRIORITY-NOT SUPPORTED BUT MUST BE PRESENT. ; WD. 06 -- REQUEST UIC. ; ; INPUTS: ; ; R0=ADDRESS OF THE TCB OF THE TASK TO BE REQUESTED. ; R1=ADDRESS OF THE TASK STATUS WORD OF THE TASK TO BE REQUESTED. ; R2=ADDRESS OF THE TASK STATUS WORD OF THE CURRENT TASK. ; R3=ADDRESS OF THE PARTITION NAME IN THE DPB. ; R4=ADDRESS OF THE HEADER OF THE CURRENT TASK. ; R5=ADDRESS OF THE TCB OF THE CURRENT TASK. ; ; OUTPUTS: (DIRECTIVE STATUS AND PS RETURNED TO TASK) ; ; C=0 IF DIRECTIVE IS SUCCESSFULLY COMPLETED. ; DIRECTIVE STATUS OF +1 IS RETURNED. ; C=1 IF DIRECTIVE IS REJECTED. ; DIRECTIVE STATUS OF 'D.RS1' IS RETURNED IF PARTITION ; CONTROL BLOCK OR TASK CONTROL BLOCK CANNOT BE ; ALLOCATED. ; DIRECTIVE STATUS OF 'D.RS7' IS RETURNED IF SPECIFIED. ; TASK IS ALREADY ACTIVE. ; ; NOTE: IF THE SYSTEM SUPPORTS PARENT/OFFSPRING TASKING, THE ; REQUEST DIRECTIVE IS IN THE MODULE DRSPW. ; ; ON SYSTEMS SUPPORTING PROTOTYPE TCBS AND NON ; RESIDENT TASK HEADERS, KISAR6 MAY MAP THE ; THE PROTOTYPE TCB AT ENTRY. ; ;- $DRREQ:: ; .IF DF R$$DSP CLR -(SP) ;INIT DISPATCHING FLAG TO NO DISPATCHING MOV 6(R3),-(SP) ;SAVE REQUEST UIC CMP T.NAM(R0),#^R... ;DOES TASK HAVE MULTI-USER NAME? BNE 5$ ;IF NE NO MOV R0,-(SP) ;SAVE TEMPLATE TCB ADDRESS MOV T.NAM+2(R0),R1 ;PICK UP SECOND WORD OF TASK NAME MOV T.UCB(R5),R0 ;PICK UP TARGET UCB ADDRESS CALL $SRMUT ;SEARCH FOR APPROPRIATE COPY OF TCB BCC 4$ ;IF CC COPY WAS FOUND MOV #T.LGTH,R1 ;ELSE PICK UP SIZE OF TCB TO ALLOCATE CALL $ALOCB ;ALLOCATE A TCB BCS 15$ ;IF CS ALLOCATION FAILURE MOV R0,4(SP) ;SAVE ALLOCATED TCB ADDRESS AS FLAG MOV (SP),R1 ;RETRIEVE TEMPLATE TCB ADDRESS CALL $TCBCP ;PERFORM COPY AND INSTALL OPERATION 4$: TST (SP)+ ;CLEAN STACK 5$: MOV (SP)+,R1 ;RETRIEVE REQUEST UIC .IFF MOV 6(R3),R1 ;PICK UP REQUEST UIC .IFTF .IF DF M$$MUP .IF DF X$$HDR MOV $SAHDB,KISAR6 ;MAP NONRESIDENT TASK HEADER .ENDC CALL $UISET ;ESTABLISH DEFAULT AND CURRENT UIC'S .ENDC MOV T.UCB(R5),R2 ;GET ADDRESS OF REQUESTER TI UCB .IF DF N$$DIR MOV T.CTX(R5),$CTXPT ;PROPAGATE CONTEXT BLOCK .ENDC ;DF N$$DIR CALL $TSKRP ;REQUEST TASK EXECUTION BCS 10$ ;IF CS TASK ALREADY ACTIVE .IFT MOV (SP)+,R0 ;WAS A TCB DISPATCHED? BEQ 6$ ;IF EQ NO BIS #T3.REM,T.ST3(R0) ;SET REMOVE ON EXIT BIT .ENDC 6$: RETURN ;RETURN DIRECTIVE STATUS OF +1 10$: BEQ 20$ ;IF EQ TASK ALREADY ACTIVE .IF DF R$$DSP MOV (SP)+,R0 ;WAS A TCB DISPATCHED? BEQ 15$ ;IF EQ NO CALL $REMOV ;REMOVE THE TASK .ENDC 15$: DRSTS D.RS1 ;SET DIRECTIVE STATUS 20$: DRSTS D.RS7 ;SET DIRECTIVE STATUS .ENDC .END